#! user/bin/python
# -*- coding: utf-8 -*-

"""
Created on 2021/8/26 11:33

@File: 处理多组分（也就是含有附件）消息.py
@Author: LT
@Description: Use of this module
"""
from email.mime.multipart import MIMEMultipart          # Message的子类
from email.mime.text import MIMEText                    # 提供更多题头+逻辑

top = MIMEMultipart()                                   # 根Messgae对象
top['from'] = '284618025@qq.com'
top['to'] = '284618025@qq.com'

sub1 = MIMEText('nice red uniforms...\n')               # 组分Message的附件
sub2 = MIMEText(open('data.txt').read())
sub2.add_header('Content-Disposition', 'attachment', filename='data.txt')
top.attach(sub1)
top.attach(sub2)

# ---------------------------------------------------------------
# 这样之后，就可以返回一份正确格式化后的全部邮件文本，分隔符什么的等一应俱全，
# 随时就可以用smtplib模块来发送。这真是一项了不起的技巧！！！
# ---------------------------------------------------------------
text = top.as_string()                                  # 也可以str(top)或者print(top)
print(text)

# ---------------------------------------------------------------
# 如果这样的text的消息发给我们，在用poplib接收后，使用email解析就变得很容易。
# 使用walk生成器就能逐个处理邮件的每个组成部分，获取他们的类型和负载
# 这样email能基于API来攥写，解析消息，故使用email就可以从文本处理中解放出来，从而专注用户接口
# ---------------------------------------------------------------
print('\n\n\nexhibit parse string...')
from email.parser import Parser

msg = Parser()
msg_dict = msg.parsestr(text)
print(msg_dict.get('from'), '\n')

for part in msg_dict.walk():
    print(part.get_content_type())
    print(part.get_payload())
    print()
